package com.boot.core.protocol

/**
 * JSON-RPC 协议
 *
 * 通信协议采用HTTP，
 * 交互数据格式为JSON（既Content-type 为“application/json”），
 * 交互数据 使用 UTF-8 编码。
 * 接口按照JSON—RPC2.0，
 * 规范详情地址：http://www.jsonrpc.org
 *
 * 资源服务系统访问URL 根地址为：http://[ip]:[port]/drs/json-rpc。
 * 其中”ip”、”port”以项目实际情 况而定。URL 中的 drs 和 json-rpc 仅供参考，资源服务可根据情
 */
class RPC {

    /**
     * version(8): 协议版本号, 固定为:20190221
     * appId(32): 请求方应用ID。由第三方应用服务为本DRS系统分配提供。如: 08e955d0e030499ba77dc0639a0bb13a
     * timestamp(17): 请求方时间戳，时间格式为yyyyMMddHHmmssSSS，即年月日时分秒毫秒, 如: 20180611142246134
     *      此处看情况
     * nonce(32): 随机字符串, 如: vMksKOwd
     * sign(): 签名。将appId,timestamp和nonce组成的字符串，使用请求方私钥生成签名。当响应方收到请求时，需要进行验签。 暂不实现，设置为空。
     *      如: kaZOvw3qFWQNvMIpsgivMJuDrVx0Use4jxmoatVfMybaQO1qsvN867xyFG/5VNsPLXKPXt2lmzcWOIf9t/8zGA==
     */
    class RequestJsonRPC {
        val jsonrpc:String = "2.0"
        val version:String = "20190221"
        var id:String = ""
        var appId:String = ""
        var timestamp:String = ""
        var nonce:String = ""
        class Params {
            var data:String = ""
            var sign:String = ""
        }
    }

    /**
     * code(): 返回码，成功 1 失败 2 ，无效会话 3, 如: 1
     * msg(): 返回 描述 特别为失败时 错误的详细描述, default: OK
     * appId(32): 资源服务提供方 ID, 如: 30d1fca698f449a5853129a43b935637
     * timestamp(17): 请求方时间戳，时间格式为 yyyyMMddHHmmssSSS，即年月日时分秒毫秒, 如: 20180611142246134
     *      此处看情况
     * nonce(32): 随机字符串, 如: vMksKOwd
     * sign(): 签名。将appId,timestamp和nonce组成的字符串，使用请求方私钥生成签名。当响应方收到请求时，需要进行验签。 暂不实现，设置为空。
     *      如: kaZOvw3qFWQNvMIpsgivMJuDrVx0Use4jxmoatVfMybaQO1qsvN867xyFG/5VNsPLXKPXt2lmzcWOIf9t/8zGA==
     * sessionId(32): 会话ID, 响应方必须保证会话ID的唯一性。会话时效性为 30 分钟，每次数据查询或查询操作等请求，会话自动续期
     *      如: e68f26bb70ab41b8a9fa2a37b34ab1bc
     */
    class ResponseJsonRPC {
        val jsonrpc:String = "2.0"
        var id:String = ""
        var appId:String = ""
        var timestamp:String = ""
        var nonce:String = ""
        var sessionId:String = ""
        class Result {
            var code:CodeType = CodeType.Success
            var msg:String = ""
            var data:String = ""
            var sign:String = ""
        }
    }

    enum class CodeType(s: Int) {
        Success(1),
        Fail(2),
        Avail(3)
    }

}